package com.atguigu05.method_more._04recursion;

/**
 * ClassName: RecursionTest
 * Package: com.atguigu05.method_more._04recursion
 * Description:
 *
 * @Author 姜
 * @Create 2023/11/20 14:08
 * @Version 1.0
 */
public class RecursionTest {
    public static void main(String[] args) {
        RecursionTest test = new RecursionTest();
//        test.method1();
        System.out.println(test.getSum1(100));
        System.out.println(test.getMul(5));
        System.out.println(test.f(10));
    }

    /*
     * 如下递归方法的调用，会导致StackOverflowError
     * */
//    public void method1(){
//        System.out.println("method1()....");
//        method1();
//    }
    /*
     * 举例1：计算1-100内自然数的总和
     * */
    public int getSum(int num) {
        int sum = 0;
        for (int i = 0; i <= num; i++) {
            sum += i;
        }
        return sum;
    }

    public int getSum1(int num) {
        if (num == 1) {
            return 1;
        } else {
            return getSum(num - 1) + num;
        }
    }

    /*
     * 举例2：计算n!
     * */
    public int getMul(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n * getMul(n - 1);
        }
    }

    /*
     * 举例3：快速排序
     * */
    /*
     * 举例4：汉诺塔游戏
     * */
    /*
     * 举例5：斐波那契数列
     * */
    public int f(int n) {
        if (n == 1 || n == 2) {
            return 1;
        } else {
            return f(n - 1) + f(n - 2);
        }
    }
    /*
    * 举例6：
    * File类的对象表示一个文件目录
    * 计算指定的文件目录大小，遍历指点的文件目录中的所有文件，删除指定的文件目录。
    * */
}
